{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归基本步骤"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第一步"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 加载数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第二步"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 归一化处理$x_i=\\frac{x_i-\\mu _i}{s_i}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第三步"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 计算损失函数loss    $J(\\theta)=\\frac{1}{2m}\\sum_{i=1}^{m}(h_\\theta(x^i)-y^i)^2$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第四步"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 通过梯度下降算法更新$\\theta$的值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第五步"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 通过测试集预测模型的效果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "from matplotlib.font_manager import FontProperties\n",
    "\n",
    "font = FontProperties(fname=r\"c:\\windows\\fonts\\simsun.ttc\", size=14)  # 解决windows环境下画图汉字乱码问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def linearRegression(alpha=0.01, num_iters=100):\n",
    "    print (u\"加载数据...\\n\")\n",
    "\n",
    "    data = loadtxtAndcsv_data(\"train.txt\", \",\", np.float64)  # 读取数据\n",
    "    X = data[:, 0:-1]  # X对应0到倒数第2列\n",
    "    y = data[:, -1]  # y对应最后一列\n",
    "    m = len(y)  # 总的数据条数\n",
    "    col = data.shape[1]  # data的列数\n",
    "    \n",
    "    \n",
    "    print('归一化之前的效果图')\n",
    "    plot_X1_X2(X)  # 画图看一下归一化之前效果\n",
    "\n",
    "    X, mu, sigma = featureNormaliza(X)  # 归一化\n",
    "    \n",
    "    print('归一化之后的效果图')\n",
    "    plot_X1_X2(X)  # 画图看一下归一化后效果\n",
    "    \n",
    "    X1 = data[:,0]\n",
    "    X2 = data[:,1]\n",
    "    print('3D数据图')\n",
    "    plot_3D(X1,X2,y)\n",
    "\n",
    "    X = np.hstack((np.ones((m, 1)), X))  # 在X前加一列1\n",
    "\n",
    "    print (u\"\\n执行梯度下降算法....\\n\")\n",
    "\n",
    "    theta = np.zeros((col, 1))\n",
    "    y = y.reshape(-1, 1)  # 将行向量转化为列\n",
    "    theta, J_history = gradientDescent(X, y, theta, alpha, num_iters)\n",
    "\n",
    "    plotJ(J_history, num_iters)\n",
    "\n",
    "    return mu, sigma, theta  # 返回均值mu,标准差sigma,和学习的结果theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 加载txt和csv文件\n",
    "def loadtxtAndcsv_data(fileName, split, dataType):\n",
    "    return np.loadtxt(fileName, delimiter=split, dtype=dataType)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 加载npy文件\n",
    "def loadnpy_data(fileName):\n",
    "    return np.load(fileName)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 归一化feature\n",
    "def featureNormaliza(X):\n",
    "    X_norm = np.array(X)  # 将X转化为numpy数组对象，才可以进行矩阵的运算\n",
    "    # 定义所需变量\n",
    "    mu = np.zeros((1, X.shape[1]))\n",
    "    sigma = np.zeros((1, X.shape[1]))\n",
    "\n",
    "    mu = np.mean(X_norm, 0)  # 求每一列的平均值（0指定为列，1代表行）\n",
    "    sigma = np.std(X_norm, 0)  # 求每一列的标准差\n",
    "    for i in range(X.shape[1]):  # 遍历列\n",
    "        X_norm[:, i] = (X_norm[:, i] - mu[i]) / sigma[i]  # 归一化\n",
    "\n",
    "    return X_norm, mu, sigma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 画二维图\n",
    "def plot_X1_X2(X):\n",
    "    plt.scatter(X[:, 0], X[:, 1])\n",
    "    plt.xlabel('X1')\n",
    "    plt.ylabel('X2')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#画3D图\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "def plot_3D(X1,X2,y):\n",
    "    ax = plt.subplot(111, projection='3d')  # 创建一个三维的绘图工程\n",
    "    \n",
    "    ax.scatter(X1, X2, y, c='b')  # 绘制数据点\n",
    "\n",
    "    ax.set_zlabel('Z')  # 坐标轴\n",
    "    ax.set_ylabel('X2')\n",
    "    ax.set_xlabel('X1')\n",
    "    \n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 梯度下降算法\n",
    "def gradientDescent(X, y, theta, alpha, num_iters):\n",
    "    m = len(y)\n",
    "    n = len(theta)\n",
    "\n",
    "    temp = np.matrix(np.zeros((n, num_iters)))  # 暂存每次迭代计算的theta，转化为矩阵形式\n",
    "\n",
    "    J_history = np.zeros((num_iters, 1))  # 记录每次迭代计算的代价值\n",
    "\n",
    "    for i in range(num_iters):  # 遍历迭代次数\n",
    "        h = np.dot(X, theta)  # 计算内积，matrix可以直接乘\n",
    "        temp[:, i] = theta - ((alpha / m) * (np.dot(np.transpose(X), h - y)))  # 梯度的计算\n",
    "        theta = temp[:, i]\n",
    "        J_history[i] = computerCost(X, y, theta)  # 调用计算代价函数\n",
    "        if i % 100 == 0:\n",
    "            print(\"iter = %d，loss = %f\" % (i,J_history[i]))\n",
    "    return theta, J_history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算代价函数\n",
    "def computerCost(X, y, theta):\n",
    "    m = len(y)\n",
    "    J = 0\n",
    "\n",
    "    J = (np.transpose(X * theta - y)) * (X * theta - y) / (2 * m)  # 计算代价J\n",
    "    return J"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 画每次迭代代价的变化图\n",
    "def plotJ(J_history, num_iters):\n",
    "    x = np.arange(1, num_iters + 1)\n",
    "    plt.plot(x, J_history)\n",
    "    plt.xlabel(u\"迭代次数\", fontproperties=font)  # 注意指定字体，要不然出现乱码问题\n",
    "    plt.ylabel(u\"代价值\", fontproperties=font)\n",
    "    plt.title(u\"代价随迭代次数的变化\", fontproperties=font)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 测试linearRegression函数\n",
    "def testLinearRegression():\n",
    "    mu, sigma, theta = linearRegression(0.05, 1000)\n",
    "    print (u\"\\n计算的theta值为：\\n\",theta)\n",
    "    print (u\"\\n预测结果为：%f\"%predict(mu, sigma, theta))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 测试学习效果（预测）\n",
    "def predict(mu, sigma, theta):\n",
    "    result = 0\n",
    "    # 注意归一化\n",
    "    predict = np.array([1650, 3])\n",
    "    norm_predict = (predict - mu) / sigma\n",
    "    final_predict = np.hstack((np.ones((1)), norm_predict))\n",
    "\n",
    "    result = np.dot(final_predict, theta)  # 预测结果\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "加载数据...\n",
      "\n",
      "归一化之前的效果图\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAGIxJREFUeJzt3X+Q3XV97/HXq8uK61VZkFObbBKjLRNaxEvwXKSXO71AfwQihYwyt3GmKtQ2c62OWHtjjXYUneuApq2MY4UbqwXEIhbTTErBNC046kwJ3ZBAoCHX+DO/2qziBhh2uJvlff8433xycjg/N+dzzln2+Zg5s9/z+X6+3+/7+8nuvvL9sefriBAAAJL0c/0uAAAwOAgFAEBCKAAAEkIBAJAQCgCAhFAAACSEAgAgIRQAAAmhAABITul3AZ0688wzY+nSpf0uAwDmlO3bt/8kIkqt+s25UFi6dKnGx8f7XQYAzCm2f9ROP04fAQASQgEAkBAKAICEUAAAJIQCACDJGgq2f2h7l+2dtl9wy5ArPmt7r+1HbZ+fsx4AQHO9uCX1koj4SYN5l0s6q3i9SdLNxVcAQGHTjgNav2WPDk5OaeHoiNauWKZVy8eybKvff6dwlaTbo/JM0Adtj9peEBGH+lwXAAyETTsOaN3GXZqanpEkHZic0rqNuyQpSzDkvqYQkv7R9nbba+rMH5O0r+r9/qINACBp/ZY9KRCOmZqe0fote7JsL/eRwkURcdD2z0vaavuJiPhW1XzXWSZqG4pAWSNJS5YsyVMpAAygg5NTHbWfrKxHChFxsPh6WNLfSbqgpst+SYur3i+SdLDOejZERDkiyqVSy4/uAIAXjYWjIx21n6xsoWD7P9l+xbFpSb8l6bGabpslvaO4C+lCSUe4ngAAx61dsUwjw0MntI0MD2ntimVZtpfz9NGrJf2d7WPb+ZuI+Ibt/ylJEXGLpHslrZS0V9Kzkq7NWA8AzDnHLib36u4jV278mTvK5XLwKakA0Bnb2yOi3Koff9EMAEgIBQBAQigAABJCAQCQEAoAgIRQAAAkhAIAICEUAAAJoQAASAgFAEBCKAAAEkIBAJAQCgCAhFAAACSEAgAgIRQAAEn2ULA9ZHuH7XvqzLvG9oTtncXr93PXAwBoLOfjOI+5TtJuSa9sMP+uiHhvD+oAALSQ9UjB9iJJb5b0Vzm3AwDojtynj26S9EFJzzfp81bbj9q+2/bieh1sr7E9bnt8YmIiS6EAgIyhYPsKSYcjYnuTbn8vaWlEvEHSP0m6rV6niNgQEeWIKJdKpQzVAgCkvEcKF0m60vYPJX1V0qW276juEBE/jYjnirdfkPTGjPUAAFrIFgoRsS4iFkXEUkmrJd0fEb9b3cf2gqq3V6pyQRoA0Ce9uPvoBLY/IWk8IjZLep/tKyUdlfSkpGt6XQ8A4DhHRL9r6Ei5XI7x8fF+lwEAc4rt7RFRbtWPv2gGACSEAgAgIRQAAAmhAABICAUAQEIoAAASQgEAkBAKAICEUAAAJIQCACAhFAAACaEAAEgIBQBAQigAABJCAQCQZA8F20O2d9i+p868U23fZXuv7W22l+auBwDQWC+evHadKo/ZfGWdee+S9LOI+CXbqyV9StLv9KAmdGjTjgNav2WPDk5O6bSRYdnS5LPTWjg6orUrlmnV8rEX9D0wOaUhWzMR6evY6IguObukB56Y0MHJqbaXH6vTr1mN9dbbjX1f2Eb9vTDbMUJeub4Heynrk9dsL5J0m6RPSvpARFxRM3+LpOsj4l9snyLp3yWVoklRPHmt9zbtOKB1G3dpanqm7vyR4SHd8JZztWr5WMu+J7N8db92amzWv13t7E83ttOtmnpdC47L9T3YLYPy5LWbJH1Q0vMN5o9J2idJEXFU0hFJr8pcEzq0fsuepr8Up6ZntH7Lnrb6nszy1f3aqbFZ/3a1sz/d2E4nZjtGyCvX92CvZQsF21dIOhwR25t1q9P2gqME22tsj9sen5iY6FqNaM/Byam2+7TT92SWbzS/0/ZO6+pWv26Y7Rghr1zfg72W80jhIklX2v6hpK9KutT2HTV99ktaLEnF6aPTJD1Zu6KI2BAR5Ygol0qljCWjnoWjI233aafvySzfaH6n7Z3W1a1+3TDbMUJeub4Hey1bKETEuohYFBFLJa2WdH9E/G5Nt82S3llMX130yXeRA7OydsUyjQwPNZw/MjyktSuWtdX3ZJav7tdOjc36t6ud/enGdjox2zFCXrm+B3utF3cfncD2JySNR8RmSV+U9GXbe1U5Qljd63rQ2rGLZO3cfVTddzZ3HzVavtWdNbU1duvOj3rr7ffdR7MdI+SV63uw17LefZQDdx8BQOcG5e4jAMAcQigAABJCAQCQEAoAgIRQAAAkhAIAICEUAAAJoQAASAgFAEBCKAAAEkIBAJAQCgCAhFAAACSEAgAgIRQAAAmhAABIsoWC7Zfafsj2I7Yft/3xOn2usT1he2fx+v1c9QAAWsv5OM7nJF0aEc/YHpb0Hdv3RcSDNf3uioj3ZqwDANCmbKEQled8PlO8HS5ec+vZnwAwz2S9pmB7yPZOSYclbY2IbXW6vdX2o7bvtr04Zz0AgOayhkJEzETEeZIWSbrA9utruvy9pKUR8QZJ/yTptnrrsb3G9rjt8YmJiZwlA8C81pO7jyJiUtI3JV1W0/7TiHiuePsFSW9ssPyGiChHRLlUKmWtFQDms5x3H5VsjxbTI5J+Q9ITNX0WVL29UtLuXPUAAFrLeffRAkm32R5SJXy+FhH32P6EpPGI2CzpfbavlHRU0pOSrslYDwCgBVduEpo7yuVyjI+P97sMAJhTbG+PiHKrfvxFMwAgIRQAAAmhAABICAUAQEIoAAASQgEAkBAKAICEUAAAJIQCACAhFAAACaEAAEgIBQBAQigAABJCAQCQEAoAgKRpKNh+pe1frNP+hlYrtv1S2w/ZfsT247Y/XqfPqbbvsr3X9jbbSzspHgDQXQ2fvGb7f0i6SdJh28OSromIfy1m3yrp/Bbrfk7SpRHxTLH8d2zfFxEPVvV5l6SfRcQv2V4t6VOSfmeW+9JTm3Yc0Pote3RwckoLR0e0dsUyrVo+dkKfP920S3du26eZCFlS7eOMxhosV2/9l5xd0j2PHNLk1HTq87Lhn9NLThnSkanp1OeBJyZOqEmSrt/8eFru9JcN62O/fU7dbXa6f5307Uaf6vmnjQzLliafnW5ZXz/3aRDMlTpzmM/7PlsNn7xme6ekyyPikO0LJN0u6cMRsdH2johY3vZG7JdJ+o6kd0fEtqr2LZKuj4h/sX2KpH+XVIomj4MbhCevbdpxQOs27tLU9ExqGxke0g1vOTd9w/3ppl2648Eft1xX7XKN1j8bw0PWzEzo+Trt66/+z01/Ibbav076dqNPqzFpVF8/92kQzJU6c5jP+15PN568dkpEHJKkiHhI0iWSPmL7fXrhf3obFTFUhMthSVurA6EwJmlfsY2jko5IelU76+6n9Vv2vOCX09T0jNZv2ZPe37ltX1vrql2u0fpnY7pOIBxrr91mq+3Xq7Pdvt3o02pMGtXXz30aBHOlzhzm876fjGah8FT19YQiIC6WdJWkc9pZeUTMRMR5khZJusD262u6uN5itQ2219getz0+MTHRzqazOjg51bJ9poNnX9eur9H6u6nZNtrZv076dqNPO2MyaPs0COZKnTnM530/Gc1C4U9U80s7Ip6WdJmkT3aykYiYlPTNYtlq+yUtlqTi9NFpkp6ss/yGiChHRLlUKnWy6SwWjo60bB9yvbxrb32N1t9NzbbRzv510rcbfdoZk0Hbp0EwV+rMYT7v+8loFgq3SXpr8ctakmT71ZL+WtJvt1qx7ZLt0WJ6RNJvSHqipttmSe8spq+WdH+z6wmDYu2KZRoZHjqhbWR4KF3YlaS3vWlxW+uqXa7R+mdjeMh1/4GHh/yCbbbafr062+3bjT6txqRRff3cp0EwV+rMYT7v+8loePeRpDdKukHSDtvXSTpX0gckfVrSO9pY9wJJt9keUiV8vhYR99j+hKTxiNgs6YuSvmx7rypHCKtnvyu9c+wiVbO7Gv73qnMlaVZ3H9Vbfy/vPmpn/zrp240+tfM7vfuoH/s0COZKnTnM530/GQ3vPkodKoHwGUkHJV0YEft7UVgjg3D3EQDMNSd995HtUdv/R9K1qlwLuFvSfbYv7V6ZAIBB0uz00cOSPi/pPcXtov9o+zxJn7f9o4h4W08qBAD0TLNQ+LXaU0URsVPSf7X9B3nLAgD0Q8PTR82uHUTEF/KUAwDoJz4lFQCQEAoAgIRQAAAkhAIAICEUAAAJoQAASAgFAEBCKAAAEkIBAJAQCgCAhFAAACSEAgAgyRYKthfbfsD2btuPFw/rqe1zse0jtncWr4/mqgcA0Fqzj84+WUcl/XFEPGz7FZK2294aEf9W0+/bEXFFxjoAAG3KdqQQEYci4uFi+mlJuyXxcFQAGGA9uaZge6mk5ZK21Zn9q7YfsX2f7XN6UQ8AoL6cp48kSbZfLunrkt4fEU/VzH5Y0msi4hnbKyVtknRWnXWskbRGkpYsWZK5YgCYv7IeKdgeViUQvhIRG2vnR8RTEfFMMX2vpGHbZ9bptyEiyhFRLpVKOUsGgHkt591HlvRFSbsj4i8a9PmFop9sX1DU89NcNQEAmst5+ugiSW+XtMv2zqLtw5KWSFJE3CLpaknvtn1U0pSk1RERGWsCADSRLRQi4juS3KLP5yR9LlcNAIDO8BfNAICEUAAAJIQCACAhFAAACaEAAEgIBQBAQigAABJCAQCQEAoAgIRQAAAkhAIAICEUAAAJoQAASAgFAEBCKAAAkpxPXlts+wHbu20/bvu6On1s+7O299p+1Pb5ueoBALSW88lrRyX9cUQ8bPsVkrbb3hoR/1bV53JJZxWvN0m6ufjaVZt2HND6LXt0cHJKC0dHtHbFMq1aPtbtzcxaq/py1D/bddYud8nZJT3wxMTAji2AzuR88tohSYeK6adt75Y0Jqk6FK6SdHvxCM4HbY/aXlAs2xWbdhzQuo27NDU9I0k6MDmldRt3SdJA/PJqVV+O+me7znrL3fHgj9P8QRtbAJ3ryTUF20slLZe0rWbWmKR9Ve/3F21ds37LnvRL7Jip6Rmt37Knm5uZtVb15ah/tuust1ytQRpbAJ3LHgq2Xy7p65LeHxFP1c6us0jUWcca2+O2xycmJjra/sHJqY7ae61VfTnqn+06293moIwtgM5lDQXbw6oEwlciYmOdLvslLa56v0jSwdpOEbEhIsoRUS6VSh3VsHB0pKP2XmtVX476Z7vOdrc5KGMLoHM57z6ypC9K2h0Rf9Gg22ZJ7yjuQrpQ0pFuXk+QpLUrlmlkeOiEtpHhIa1dsaybm5m1VvXlqH+266y3XK1BGlsAnct599FFkt4uaZftnUXbhyUtkaSIuEXSvZJWStor6VlJ13a7iGMXPAf17qNW9eWof7brrLccdx8BLy6u3Pgzd5TL5RgfH+93GQAwp9jeHhHlVv34i2YAQEIoAAASQgEAkBAKAICEUAAAJIQCACAhFAAACaEAAEgIBQBAQigAABJCAQCQEAoAgIRQAAAkhAIAICEUAAAJoQAASHI+jvNLtg/bfqzB/IttH7G9s3h9NFctAID25Hwc562SPifp9iZ9vh0RV2SsAQDQgWxHChHxLUlP5lo/AKD7+n1N4VdtP2L7Ptvn9LkWAJj3cp4+auVhSa+JiGdsr5S0SdJZ9TraXiNpjSQtWbKkdxUCwDzTtyOFiHgqIp4ppu+VNGz7zAZ9N0REOSLKpVKpp3UCwHzSt1Cw/Qu2XUxfUNTy037VAwDIePrI9p2SLpZ0pu39kj4maViSIuIWSVdLerfto5KmJK2OiMhVDwCgtWyhEBFvazH/c6rcsgoAGBD9vvsIADBACAUAQEIoAAASQgEAkBAKAICEUAAAJIQCACAhFAAACaEAAEgIBQBAQigAABJCAQCQEAoAgIRQAAAkhAIAICEUAABJtlCw/SXbh20/1mC+bX/W9l7bj9o+P1cts7FpxwFddOP9eu2H/kEX3Xi/Nu040O+SACC7nEcKt0q6rMn8yyWdVbzWSLo5Yy0d2bTjgNZt3KUDk1MKSQcmp7Ru4y6CAcCLXrZQiIhvSXqySZerJN0eFQ9KGrW9IFc9nVi/ZY+mpmdOaJuantH6LXv6VBEA9EY/rymMSdpX9X5/0fYCttfYHrc9PjExkb2wg5NTHbUDwItFP0PBddqiXseI2BAR5Ygol0qlzGVJC0dHOmoHgBeLfobCfkmLq94vknSwT7WcYO2KZRoZHjqhbWR4SGtXLOtTRQDQG/0Mhc2S3lHchXShpCMRcaiP9SSrlo/phrecq7HREVnS2OiIbnjLuVq1vO7ZLQB40Tgl14pt3ynpYkln2t4v6WOShiUpIm6RdK+klZL2SnpW0rW5apmNVcvHCAEA8062UIiIt7WYH5Lek2v7AIDO8RfNAICEUAAAJIQCACAhFAAACaEAAEhcuQlo7rA9IelHPdzkmZJ+0sPtzRZ1dhd1dhd1dtds6nxNRLT8SIg5Fwq9Zns8Isr9rqMV6uwu6uwu6uyunHVy+ggAkBAKAICEUGhtQ78LaBN1dhd1dhd1dle2OrmmAABIOFIAACTzLhRsf8n2YduPVbWdYXur7e8WX08v2m37s7b32n7U9vlVy7yz6P9d2+/sUZ3X2z5ge2fxWlk1b11R5x7bK6raLyva9tr+UIY6F9t+wPZu24/bvq5oH6gxbVLnQI2p7Zfafsj2I0WdHy/aX2t7WzE2d9l+SdF+avF+bzF/aav6M9d5q+0fVI3neUV7336Wim0M2d5h+57i/UCNZ5M6ez+eETGvXpJ+TdL5kh6ravu0pA8V0x+S9KlieqWk+1R5StyFkrYV7WdI+n7x9fRi+vQe1Hm9pP9Vp++vSHpE0qmSXivpe5KGitf3JL1O0kuKPr/S5ToXSDq/mH6FpP9b1DNQY9qkzoEa02JcXl5MD0vaVozT1yStLtpvkfTuYvoPJd1STK+WdFez+ntQ562Srq7Tv28/S8V2PiDpbyTdU7wfqPFsUmfPx3PeHSlExLckPVnTfJWk24rp2yStqmq/PSoelDRqe4GkFZK2RsSTEfEzSVslXdaDOhu5StJXI+K5iPiBKs+ouKB47Y2I70fE/5P01aJvN+s8FBEPF9NPS9qtyrO2B2pMm9TZSF/GtBiXZ4q3w8UrJF0q6e6ivXY8j43z3ZJ+3bab1J+7zkb69rNke5GkN0v6q+K9NWDjWa/OFrKN57wLhQZeHcVT34qvP1+0j0naV9Vvf9HWqL0X3lscLn7p2CmZJvX0tM7iUHu5Kv9rHNgxralTGrAxLU4h7JR0WJUf6u9JmoyIo3W2meop5h+R9Kp+1BkRx8bzk8V4fsb2qbV11tTTi3/3myR9UNLzxftXaQDHs06dx/R0PAmF5lynLZq053azpF+UdJ6kQ5L+vGjve522Xy7p65LeHxFPNevaoKae1FqnzoEb04iYiYjzVHlu+QWSfrnJNgemTtuvl7RO0tmS/osqpzD+pJ912r5C0uGI2F7d3GSbg1Sn1IfxJBQq/qM49FLx9XDRvl/S4qp+iyQdbNKeVUT8R/GD+LykL+j44Wtf67Q9rMov2q9ExMaieeDGtF6dgzqmRW2Tkr6pyjnjUdvHnpRYvc1UTzH/NFVOO/ajzsuK03QREc9J+mv1fzwvknSl7R+qcqrvUlX+Rz5o4/mCOm3f0ZfxnO0Fkbn8krRUJ17AXa8TL4p+uph+s068mPNQHL+Y8wNVLuScXkyf0YM6F1RN/5Eq5zgl6RydeBHs+6pcED2lmH6tjl8UPafLNVrS7ZJuqmkfqDFtUudAjamkkqTRYnpE0rclXSHpb3XihdE/LKbfoxMvjH6tWf09qHNB1XjfJOnGQfhZKrZ1sY5fwB2o8WxSZ8/Hs+s7NOgvSXeqcppgWpVUfZcq5wz/WdJ3i69nVP1D/KUq53R3SSpXref3VLnYtFfStT2q88tFHY9K2qwTf6F9pKhzj6TLq9pXqnKnzfckfSRDnf9NlcPTRyXtLF4rB21Mm9Q5UGMq6Q2SdhT1PCbpo0X76yQ9VIzN30o6tWh/afF+bzH/da3qz1zn/cV4PibpDh2/Q6lvP0tV27lYx3/ZDtR4Nqmz5+PJXzQDABKuKQAAEkIBAJAQCgCAhFAAACSEAgAgIRSADrnyias/sH1G8f704v1rbH/D9uSxT7kE5hpCAehQROxT5eMxbiyabpS0ISJ+pMof7b29X7UBJ4tQAGbnM5IutP1+Vf4w7s8lKSL+WdLT/SwMOBmntO4CoFZETNteK+kbkn4rKh+jDcx5HCkAs3e5Kh9F8vp+FwJ0C6EAzELxWMTfVOXDyP7o2CfCAnMdoQB0qHgS182qPJPhx6pcXP6z/lYFdAehAHTuDyT9OCK2Fu8/L+ls2//d9rdV+ZTNX7e9P9cD3oFc+JRUAEDCkQIAICEUAAAJoQAASAgFAEBCKAAAEkIBAJAQCgCAhFAAACT/Hwr8zVe7GEC6AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "归一化之后的效果图\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3D数据图\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "执行梯度下降算法....\n",
      "\n",
      "iter = 0，loss = 59259228917.516869\n",
      "iter = 100，loss = 2061664846.552836\n",
      "iter = 200，loss = 2043473518.084863\n",
      "iter = 300，loss = 2043282310.504195\n",
      "iter = 400，loss = 2043280077.009544\n",
      "iter = 500，loss = 2043280050.911388\n",
      "iter = 600，loss = 2043280050.606434\n",
      "iter = 700，loss = 2043280050.602871\n",
      "iter = 800，loss = 2043280050.602829\n",
      "iter = 900，loss = 2043280050.602828\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "47\n",
      "1\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "Found input variables with inconsistent numbers of samples: [47, 1]",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-16-a64a03f8f264>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      7\u001b[0m \u001b[0my_predict\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmu\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0msigma\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mtheta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      8\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_predict\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 9\u001b[1;33m \u001b[0mscore\u001b[0m  \u001b[1;33m=\u001b[0m \u001b[0mr2_score\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0my_predict\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mmultioutput\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     10\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mscore\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda\\lib\\site-packages\\sklearn\\metrics\\regression.py\u001b[0m in \u001b[0;36mr2_score\u001b[1;34m(y_true, y_pred, sample_weight, multioutput)\u001b[0m\n\u001b[0;32m    528\u001b[0m     \"\"\"\n\u001b[0;32m    529\u001b[0m     y_type, y_true, y_pred, multioutput = _check_reg_targets(\n\u001b[1;32m--> 530\u001b[1;33m         y_true, y_pred, multioutput)\n\u001b[0m\u001b[0;32m    531\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    532\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0msample_weight\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda\\lib\\site-packages\\sklearn\\metrics\\regression.py\u001b[0m in \u001b[0;36m_check_reg_targets\u001b[1;34m(y_true, y_pred, multioutput)\u001b[0m\n\u001b[0;32m     73\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     74\u001b[0m     \"\"\"\n\u001b[1;32m---> 75\u001b[1;33m     \u001b[0mcheck_consistent_length\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     76\u001b[0m     \u001b[0my_true\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_true\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mensure_2d\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     77\u001b[0m     \u001b[0my_pred\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mensure_2d\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mD:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py\u001b[0m in \u001b[0;36mcheck_consistent_length\u001b[1;34m(*arrays)\u001b[0m\n\u001b[0;32m    202\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0muniques\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    203\u001b[0m         raise ValueError(\"Found input variables with inconsistent numbers of\"\n\u001b[1;32m--> 204\u001b[1;33m                          \" samples: %r\" % [int(l) for l in lengths])\n\u001b[0m\u001b[0;32m    205\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    206\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: Found input variables with inconsistent numbers of samples: [47, 1]"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "\n",
    "mu, sigma, theta = linearRegression(0.05, 1000)\n",
    "data = loadtxtAndcsv_data(\"train.txt\", \",\", np.float64)\n",
    "y_true = data[:,-1]\n",
    "print(y_true.shape[0])\n",
    "y_predict = predict(mu,sigma,theta)\n",
    "print(y_predict.shape[0])\n",
    "score  = r2_score(y_true,y_predict,sample_weight=None,multioutput=None)\n",
    "print(score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "testLinearRegression()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 归一化之前的二维数据图和三维数据图是自己做的，第一次尝试画三维图，先这样吧，线性回归的代码基本就是这些。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
